Transfer Hash'i ile İşlemleri Al
Transferler gerçekleşirken gerçekleşen transfere bağlı olarak bloklar zincire eklenmektedir. Bu blokların hash değerleri işlemin hash değeri olarak kabul edilebilir. Covalent Api ile bu hash değeri kullanılarak adrese bağlı işlem alınabilmektedir.
import requests
Tablo 118
Tablo 118'de diğer fonksiyonlarda olduğu gibi "requests" kütüphanesi eklenmektedir. Bu kütüphane ile oluşturulan URL yapıları sorgu yapılır ve verisi kaydedilir. Eğer kütüphane daha önce eklendiyse sonrasından yeniden eklenmesi derlenme süresini artırmaktadır. Bu nedenle genellikle diğer kütüphaneler ile en başta eklenmesi kolaylık sağlamaktadır.
def HashdenİşlemiAl(ApiAnahtarı, Zincir\_Numarası,Hash,Fiat):
Tablo 119
Tablo 119'da görüldüğü üzere fonksiyon tanımlanırken "def" metodu kullanılmaktadır. Fonksiyon oluşturulurken işlevsel olunması için "HashdenİşlemiAl" ismi tercih edilmiştir ancak farklı bir adlandırma yapmak da mümkündür. Fonksiyonun parametrelerine sırasıyla bakılacak olunursa:
- ApiAnahtarı: Kişiye özgü kayıt olunurken oluşturulan işlem anahtarıdır. Bu anahtar ile işlemler ilişkilendirilir ve kaynağı belirtilir. Ücretsiz olarak Covalent Api tarafından sağlanmaktadır. Covalent Api sitesine giriş yapılan ilk sayfada yer almaktadır.
- Zincir Numarası: Elde edilmek istenen verinin hangi zincire ait olduğunu ifade etmektedir. Farklı zincirlerde işlemler yaparken bu parametre Covalent tarafından belirlenen değerlere çevirilerek işlem yapılabilmektedir.
- Hash: İşlemin gerçekleştiği bloğun hash değerini ifade etmektedir. İşlem Hash değeri olarak da isimlendirilebilir. EtherScan gibi sitelerden erişilir.
- Fiat: İşlemler sırasında kullanılan fiyatlandırmanın hangi kur üzerinden işleme sokularak tercih edilen birime karşılık verileceğini belirtmektedir. TRY veya ETH gibi değerler girilebilmekte olup bu isimlendirmeler Covelent Api üzerindeki ApiReferans kısmından kontrol edilir.
URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/transaction\_v2/" + Hash + "/?quote-currency=" + Fiat + "&key=" + ApiAnahtarı
Tablo 120
Fonksiyon tanımlandıktan sonra ilk önce yapılması gereken URL yapısının oluşturulmasıdır. Bu URL yapısı Tablo 120'de oluşturulurken kalıp kavramların aralarına seçilen parametreler uygun bir şekilde yerleştirilmelidir. Her bir karaktere dikkat edilmelidir. Aksi halde çıktı vermeyecektir. Sırası ile eklenenlere bakılacak olunursa; ilk olarak zincir numarası eklenmektedir. Devamında Hash ve Fiat eklenir. Son olarak da Api anahtarı eklenerek URL yapısı sorguya hazır hale gelir.
istek = requests.get(URL) hamverim = istek.json()
Tablo 121
Tablo 121'de verildiği üzere URL oluşturulduktan sonra requests kütüphanesinin "get" metodu sayesinde URL sorgulanır ve verisi "istek" değişkenine kaydedilir. Kaydedilen bu değişken altındaki kod sayesinde ".json()" fonksiyonu kullanılarak json formatına çevrilerek "hamverim" değişkenine eklenir. Bu şekilde sorgusu alınmış ve istenilen formata çevrilmiş olmaktadır.
verim = hamverim["data"]
Tablo 122
Alınan bu veri ham olarak düşünülebilir. Bu ham verinin içerisinde verinin kendisinin yanında sorgu elemanları da taşımaktadır. Sadece veri ile ilgilenildiği için şu anlık "hamverim" değişkeni içerisinden Tablo 112'de verildiği üzere "data" anahtarına erişilip yeni "verim" değişkenine kaydedilmesi ilerisi için kolaylık sağlamaktadır.
Adresim = verim["address"]
SonGüncelleme = verim["updated\_at"]
BirSonrakiGüncelleme = verim["next\_update\_at"]
ParaBirimi = verim["quote\_currency"]
ZincirId = verim["chain\_id"]
Tablo 123
Tablo 123'de kaydedilen verinin uygun anahtarlar ile erişilip istenilen değişkene kaydedilmesi gerekmektedir. Bu işlem yapılırken erişilen anahtarlara ve ilişkilendiği veri parçasına bakılacak olunursa:
- Adresim: Sorgulanan adresi belirlemektedir. İşlemler bu adres üzerinden gerçekleşmektedir. Veri içerisinden "address" anahtarı ile erişilmektedir.
- SonGüncelleme: Sorgulanan verinin doğrulandığı son güncelleme tarihini ifade etmektedir. Veri içerisinden "updated_at" anahtarı ile erişilmektedir.
- BirSonrakiGüncelleme: Sorgulanan işlemlerin doğrulanması beklenen bir sonraki güncelleme tarihini ifade etmektedir. Veri içerisinden "next_update_at" anahtarı ile erişilmektedir.
- ParaBirimi: Sorgulanan işlemlerin içerisindeki fiyatların hangi birime karşılık çevrileceğini belirtmektedir. Veri içerisinden "quote_currency" anahtarı ile erişilebilmektedir.
- ZincirId: Sorgulanan verinin hangi blok zincir üzerinde olduğunu ifade etmektedir. Covalent tarafından oluşturulmuş Id'ler üzerinden çıktı vermektedir (Örneğin, MATİC = 137). Veri içerisinden "chain_id" anahtarı ile eşilebilmektedir.
items = verim["items"]
Tablo 124
Tablo 124'de ise veri içerisinden "items" anahtarına erişilmektedir. Şu ana kadar alınan tüm veriler tüm işlemler için ortak olmaktaydı ancak bu "items" değişkeni içine liste halinde kaydedilen veri işlemden işleme farklılık göstermektedir. Bu nedenle items değişkeni içerisinde for döngüsü çalıştırılmaktadır.
liste = [] liste.append("Adresim: " + Adresim) liste.append("Son Güncelleme: " + SonGüncelleme) liste.append("Bir sonraki Güncelleme: " + BirSonrakiGüncelleme) liste.append("Para Birimi: " + ParaBirimi) liste.append("Zincir Id: " + str(ZincirId))
Tablo 125
Tablo 125'de özel anahtarlar ile kaydedilen verilerin liste oluşturulup içerisine uygun açıklama ile eklenilmesi söz konusudur. İlk satırda "liste" adında boş bir liste tanımlanmaktadır. Tüm veriler bu listeye kaydedilecek olup sonrasında fonksiyon çıktısı olarak bu liste kaydedilecektir. Hemen altına inildiğinde "append()" fonksiyonu ile string toplama metodu kullanılarak uygun başlıkla listeye eklendiği gözlenmektedir. Ancak string toplama metodu sadece iki string içinde yapılabildiğinden dolayı öncesinde string olmayan verinin string formatına çevrilmiş olması gerekmektedir. Bu duruma son satırda ZincirId ile karşılaşılmaktadır. ZincirId değişkeni integer formatında çıktı vermektedir. Bu nedenle string toplama işlemi yapamamaktadır. Toplama işlemine sokmadan önce "str()" fonksiyonunda değişkenin string olması sağlanarak toplamaya sokulabilmektedir.
index = 1 for item in items:
Tablo 126
Tablo 126'da görüldüğü üzere İtems içerisinde döngüye girmeden önce her değişkene kaydedeceğimiz değişkenleri birbirinden ayırmak için döngü değişkeni olarak "index" adında bir integer değeri kaydedilmektedir. Bu index değeri döngüler içerisinde sürekli olarak artacaktır. Bir sonraki satırda for döngüsü bulunmaktadır. Bu for döngüsü "items" adında veri içerisinden kaydettiğimiz listedeki her bir elemanı "item" adında döngü değişkeni olarak kaydedip işlemler yapmaktadır.
BlokİmzalanmaTarihi = ["Index Numarası: "+ str(index), "Blok İmzalanma Tarihi: "+item["block\_signed\_at"]]
BlokUzunluğu = ["Index Numarası: "+ str(index), "Blok Uzunluğu: "+str(item["block\_height"])]
İşlemHashı = ["Index Numarası: " + str(index), "İşlem Hash'ı: "+item["tx\_hash"]]
İşlemBedeli = ["Index Numarası: " + str(index), "İşlem Bedeli: "+str(item["tx\_offset"])]
İşlemBaşarılıMı = ["Index Numarası: " + str(index),"İşlem Başarılı Mı: "+ str(item["successful"])]
GönderilenAdres = ["Index Numarası: " + str(index), "Gönderilen Adres: "+item["from\_address"]]
GönderildiğiAdres = ["Index Numarası: " + str(index), "Gönderildiği Adres: "+item["to\_address"]]
Değer = ["Index Numarası: " + str(index), "Değer: "+str(item["value"])]
KurDeğeri = ["Index Numarası: " + str(index), "Kur Değeri: "+ str(item["value\_quote"])]
ÖnerilenGas = ["Index Numarası: " + str(index), "Önerilen Gas: "+ str(item["gas\_offered"])]
HarcananGas = ["Index Numarası: " + str(index),"Harcanan Gas: "+ str(item["gas\_spent"])]
GazFiyatı = ["Index Numarası: " + str(index),"Gas Fiyatı: "+ str(item["gas\_price"])]
GazKuru = ["Index Numarası: " + str(index),"Gas Kuru: "+ str(item["gas\_quote"])]
GazKuruOranı = ["Index Numarası: " + str(index), "Gaz Kur Oranı: "+ str(item["gas\_quote\_rate"])]
KayıtlıLogDefteriJsonFormatında = ["Index Numarası: " + str(index),"Verim: "+ str(item["log\_events"])]
Tablo 127
Tablo 127'de asıl veriler ile karşılaşmakta da olunup döngü içerisine girilmektedir. Öncelikle veri listesinin ilk elemanı olarak uygun index numarası string formatına çevrilip string toplama metodu ile kaydedilir. Listenin ikinci elamanı ile yine string toplama ve string formatına getirme işlemleri ile istenilen spesifik parçanın uygun başlıkla eklenmesidir. Her değişkene sırasıyla bakılacak olunursa:
- BlokİmzalanmaTarihi: İşlemin gerçekleştiği bloğun ne zaman madenciler tarafından imzalandığını ve zincire eklendiğini belirtmektedir. İtem içerisinden "block_signed_at" anahtarı ile erişilebilmektedir.
- BlokUzunluğu: İşlemin gerçekleştiği bloğun blok zinciri içerisinde hangi sıra ile zincire eklendiğini belirtmektedir. İtem içerisinden "BlokUzunluğu" anahtarı ile erişilebilmektedir.
- İşlemHashı: İşlemin gerçekleştiği blok zincir bloğunun zincire eklenirken ki hash'ini ifade etmektedir. İtem içerisinden "tx_hash" anahtarı ile erişilebilmektedir.
- İşlemBedeli: İşlemin gerçekleşirken ki ücreti belirtilmektedir. İtem içerisinden "tx_offset" anahtarı ile erişilebilmektedir.
- İşlemBaşarılıMı: İşlemin başarılı olup olmadığını boolean veri tipi ile çıktı vermektedir. İşlem başarılı bir şekilde gerçekleştiyse "true" çıktısı verirken başarısızsa "false" çıktısını verir. İtem içerisinden "successful" anahtarı ile erişilebilmektedir.
- GönderilenAdres: İşlemler dahilinde miktarın karşı tarafa gönderildiği adresi belirtmektedir. Bu adres zincirler arası farklılık göstermektedir. İtem içerisinden "from_address" anahtarı ile erişilebilmektedir.
- GönderildiğiAdres: İşlemlerin dahilinde miktarın gönderildiği karşı tarafın adresini belirtmektedir. Miktar GönderilenAdres değişkeninden GönderildiğiAdres'e aktarılmış olmaktadır. İtem içerisinden "to_address" anahtarı ile erişilmektedir.
- Değer: Gerçekleşen transfer işleminde transfer edilen miktarın değerini ifade etmektedir. Fiat ile çevrilmemiş kontrat birimine sahip olmaktadır. İtem içerisinden "value" anahtarı ile erişilmektedir.
- KurDeğeri: Gerçekleşen transfer işleminde transfer edilen miktarın değerini Fiat parametresi ile belirlenen kura göre istenilen birime çevrilmiş halini ifade etmektedir. İtem içerisinden "value_quote" anahtarı ile erişilmektedir.
- ÖnerilenGas: Gerçekleşen transferin gerçekleşebilmesi için öncesinde teklif edilmiş Gas miktarını ifade etmektedir. Bu miktar kesin olarak harcanan miktar olamamak ile beraber fazla veya az sonuçlar verebilmektedir. İtem içerisinden "gas_offered" değişkeni ile erişilmektedir.
- HarcananGas: Gerçekleşen transfer işleminin gerçekleşmesi için harcanan Gas miktarını ifade etmektedir. Birimi kontrattaki Gas birimidir. ÖnerilenGas miktarından farklılık gösterebilmektedir. İtem içerisinden "gas_spent" anahtarı ile erişilmektedir.
- GazFiyatı: Gerçekleşen transfer işleminin gerçekleşmesi için harcanan Gas miktarını parametre olarak seçilen Fiat'a yani kur birimine göre çevrilmiş halidir. İtem "gas_price" anahtarı ile erişilmektedir.
- GazKuruOranı: Gerçekleşen transfer işleminin gerçekleşmesi için harcanan Gas biriminin seçilen kura oranını ifade etmektedir. İtem "gas_price" anahtarı ile erişilmektedir.
- KayıtlıLogDefteriJsonFormatında: Gerçekleşen transfer işlemleri sonrasında blok üzerinde kaydedilen log defteri kayıtlarını Json formatında çıktı vermektedir. Bloktan bloğa farklılık gösterip bazı bloklarda boş durumda olmaktadır. Çıktıyı liste olarak döndürmekte olup İtem içerisinden "log_events" parametresi ile erişilmektedir.
liste.append(BlokİmzalanmaTarihi) liste.append(BlokUzunluğu) liste.append(İşlemHashı) liste.append(İşlemBedeli) liste.append(İşlemBaşarılıMı) liste.append(GönderilenAdres) liste.append(GönderildiğiAdres) liste.append(Değer) liste.append(KurDeğeri) liste.append(ÖnerilenGas) liste.append(HarcananGas) liste.append(GazFiyatı) liste.append(GazKuru) liste.append(GazKuruOranı) liste.append(KayıtlıLogDefteriJsonFormatında)
Tablo 128
Tablo 128'de verildiği üzere İstenilen anahtarlar ile veri değişkenlere kaydedildikten sonra her bir değişken "liste" içerisine ".append()" fonksiyonu ile eklenir. Bu veriler eklendikten sonra kullanıma hazır bir hal almaktadır. Liste içerisine kaydedilen ve anlamlandırılan veri görevlerde kullanıma hazırdır.
index += 1
Tablo 129
Tablo 129'da index değeri bir artırılarak döngüden çıkılmış olunmaktadır. Bir arttırılan döngü değişkeni sayesinde yeni veriler farklı sıra ile aynı liste içerisine kaydedilebilir hale gelmektedir.
for i in liste: print(i)
Tablo 130
Tablo 130'da veri kullanıma hazır olmaktadır. Bu veri kısa bir for döngüsü ile ekrana yazdırılır ve analize hazır hale gelir.
return liste
Tablo 131
Tablo 131'de görüldüğü üzere fonksiyon sonunda "return" metodu ile liste fonksiyon çıktısı olarak döndürülmektedir. Bu çıktıyı uygun index'leme işlemleri ile istenilen parçasına ulaşılır.
def HashdenİşlemiAl(ApiAnahtarı, Zincir\_Numarası,Hash,Fiat): URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/transaction\_v2/" + Hash + "/?quote-currency=" + Fiat + "&key=" + ApiAnahtarı istek = requests.get(URL) verim = (istek.json()) verim = verim["data"] liste = [] SonGüncelleme = verim["updated\_at"] liste.append("Son Güncelleme: " + SonGüncelleme) items = verim["items"] for item in items: BlokİmzalanmaTarihi = ["Blok İmzalanma Tarihi: " + item["block\_signed\_at"]] BlokUzunluğu = ["Blok Uzunluğu: " + str(item["block\_height"])] İşlemHashı = ["İşlem Hash'ı: " + item["tx\_hash"]] İşlemBedeli = ["İşlem Bedeli: " + str(item["tx\_offset"])] İşlemBaşarılıMı = ["İşlem Başarılı Mı: " + str(item["successful"])] GönderilenAdres = ["Gönderilen Adres: " + item["from\_address"]] GönderildiğiAdres = ["Gönderildiği Adres: " + item["to\_address"]] Değer = ["Değer: " + str(item["value"])] KurDeğeri = ["Kur Değeri: " + str(item["value\_quote"])] ÖnerilenGas = ["Önerilen Gas: " + str(item["gas\_offered"])] HarcananGas = ["Harcanan Gas: " + str(item["gas\_spent"])] GazFiyatı = ["Gas Fiyatı: " + str(item["gas\_price"])] GazKuru = ["Gas Kuru: " + str(item["gas\_quote"])] GazKuruOranı = ["Gaz Kur Oranı: " + str(item["gas\_quote\_rate"])] KayıtlıLogDefteriJsonFormatında = ["Verim: " + str(item["log\_events"])] liste.append(BlokİmzalanmaTarihi) liste.append(BlokUzunluğu) liste.append(İşlemHashı) liste.append(İşlemBedeli) liste.append(İşlemBaşarılıMı) liste.append(GönderilenAdres) liste.append(GönderildiğiAdres) liste.append(Değer) liste.append(KurDeğeri) liste.append(ÖnerilenGas) liste.append(HarcananGas) liste.append(GazFiyatı) liste.append(GazKuru) liste.append(GazKuruOranı) liste.append(KayıtlıLogDefteriJsonFormatında) for i in liste: print(i) return liste
Tablo 132
Tablo 132'de kodun tamamı ifade edilmiştir. Yapılan işlemlere sırası ile bakılacak olunursa öncelikle fonksiyon parametresi olarak girilen değerler ile URL yapısı oluşturulur ve eklenen kütüphane ile sorgusu yapılarak veri ham bir halde kaydedilir. Sonrasında her işlem için aynı olan değerler uygun anahtar ile erişilerek listeye eklenir. Devamında her işlem için ayrı olan değerler for döngüsü içerisinde item değişkeni ve index ataması ile uygun başlıklar ile değişkene atanarak listeye eklenir. İndex arttırılır ve döngü başına gelinir. Her işlem kaydedildikten sonra tüm işlemler for döngüsü yardımıyla ekrana yazdırılır. Son olarak da fonksiyon çıktısı olarak "liste" değişkeni döndürülür ve fonksiyon tamamlanır.
Son Güncelleme: 2021-08-07T22:56:28.172610331Z ['Blok İmzalanma Tarihi: 2021-07-19T04:47:05Z'] ['Blok Uzunluğu: 12854975'] ["İşlem Hash'ı: 0x905c3545a3e849037c94cd54808a66c0351c49061147dffde4c5076f6762a79f"] ['İşlem Bedeli: 125'] ['İşlem Başarılı Mı: True'] ['Gönderilen Adres: 0x2a753194b84b2fb7e01ee8b3cd9b0fd4e7c49b5c'] ['Gönderildiği Adres: 0x5c761c1a21637362374204000e383204d347064c'] ['Değer: 0'] ['Kur Değeri: 0.0'] ['Önerilen Gas: 70446'] ['Harcanan Gas: 27064'] ['Gas Fiyatı: 14300000000'] ['Gas Kuru: 6.079605903129687'] ['Gaz Kur Oranı: 15708.958984375'] ["Verim: []]
Tablo 133
Tablo 133'de örnek bir kod çıktısı verilmiştir.